/** * md5 * use : var pwd=hex_md5(pwd) */ var hexcase=0;function hex_md5(a){ if(a=="") return a; return rstr2hex(rstr_md5(str2rstr_utf8(a)))}function hex_hmac_md5(a,b){return rstr2hex(rstr_hmac_md5(str2rstr_utf8(a),str2rstr_utf8(b)))}function md5_vm_test(){return hex_md5("abc").toLowerCase()=="900150983cd24fb0d6963f7d28e17f72"}function rstr_md5(a){return binl2rstr(binl_md5(rstr2binl(a),a.length*8))}function rstr_hmac_md5(c,f){var e=rstr2binl(c);if(e.length>16){e=binl_md5(e,c.length*8)}var a=Array(16),d=Array(16);for(var b=0;b<16;b++){a[b]=e[b]^909522486;d[b]=e[b]^1549556828}var g=binl_md5(a.concat(rstr2binl(f)),512+f.length*8);return binl2rstr(binl_md5(d.concat(g),512+128))}function rstr2hex(c){try{hexcase}catch(g){hexcase=0}var f=hexcase?"0123456789ABCDEF":"0123456789abcdef";var b="";var a;for(var d=0;d>>4)&15)+f.charAt(a&15)}return b}function str2rstr_utf8(c){var b="";var d=-1;var a,e;while(++d>>6)&31),128|(a&63))}else{if(a<=65535){b+=String.fromCharCode(224|((a>>>12)&15),128|((a>>>6)&63),128|(a&63))}else{if(a<=2097151){b+=String.fromCharCode(240|((a>>>18)&7),128|((a>>>12)&63),128|((a>>>6)&63),128|(a&63))}}}}}return b}function rstr2binl(b){var a=Array(b.length>>2);for(var c=0;c>5]|=(b.charCodeAt(c/8)&255)<<(c%32)}return a}function binl2rstr(b){var a="";for(var c=0;c>5]>>>(c%32))&255)}return a}function binl_md5(p,k){p[k>>5]|=128<<((k)%32);p[(((k+64)>>>9)<<4)+14]=k;var o=1732584193;var n=-271733879;var m=-1732584194;var l=271733878;for(var g=0;g>16)+(d>>16)+(c>>16);return(b<<16)|(c&65535)}function bit_rol(a,b){return(a<>>(32-b))} /** * 星云接口安全 登录 * 公用配置 */ var LOGIN = { //时间种子 登录用 timeseed : '', /** * 外部调用方法:设置需要提交的hidden input pwd的值 * 如果没有该input时 需要先createElement * @param {HTMLElement} form 提交的form * @param {String} pwd 密码值 */ setPwdValue : function(form,pwd){ var strPwd,//编码之后需要提交的密码值 iptPwd; strPwd = LOGIN.encodePwd(pwd);//编码之后需要提交的密码值 //strPwd = pwd; iptPwd = form.pwd; //如果不存在 则创建 iptPwd.value = strPwd; }, /** * 外部调用方法:对密码进行编码 * @param {String} pwd 密码 */ encodePwd : function(pwd){ var md5 = hex_md5, time = ''; pwd = pwd + ''; if(!LOGIN.timeseed){ LOGIN.getTimeseedById_(); } time = LOGIN.timeseed; return md5(md5(pwd)); }, /** * 获取页面上include的timeseed的hidden的值 */ getTimeseedById_ : function(){ var strTimeseed, iptTimeseed = document.getElementById('timeseed'); if(iptTimeseed){ strTimeseed = iptTimeseed.value;//时间种子 LOGIN.timeseed = strTimeseed.replace(/[\D]*/g,'');//替换掉换行符等 }else{ LOGIN.timeseed = new Date().getTime(); } }, /** * 外部调用方法:获取时间种子的回调 * use :http://api.desn.net/timeseed?callback=LOGIN.cbGetTimeseed */ cbGetTimeseed : function(json){ if(json.success=='true'){ LOGIN.timeseed = json.timestamp; } }, /** * 动态加载JS * @param {String} _src js的url * @param {Function} _fn 请求完成后执行的function * @param {arguments} _args arguments for _fn */ loadScript : function(_src,_fn,_args) { var headEl = document.getElementsByTagName("head")[0]; var scriptEl = document.createElement("script"); scriptEl.src = _src; scriptEl.onload = scriptEl.onreadystatechange = function() { if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") { if(typeof(_fn) == "string") { setTimeout(function(){try{var hdl = eval(_fn);hdl.apply(null, _args);}catch(e){}}, 50); } else if(typeof(_fn) == "function") { setTimeout(function(){try{_fn.apply(null, _args);}catch(e){}}, 50); } } } headEl.appendChild(scriptEl); }, //数组去重 unique : function (arr) { var tempArr = []; var tempObj = {}; for (var i = 0; i < arr.length; i++) { if (!(arr[i] in tempObj) || !(arr[i] === tempObj[arr[i]])) { tempArr.push(arr[i]); tempObj[arr[i]] = arr[i]; } } return tempArr; }, /** * 公用的cookie方法 * use : * setCookie('mycolor','red','0.01') * deleteCookie('mycolor') * alert(getCookie('mycolor')) */ getCookie : function( name ) { var start = document.cookie.indexOf( name + "=" ); var len = start + name.length + 1; if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) { return null; } if ( start == -1 ) return null; var end = document.cookie.indexOf( ';', len ); if ( end == -1 ) end = document.cookie.length; return unescape( document.cookie.substring( len, end ) ); }, // expires为天数,比如expires:1表示一天 setCookie : function( name, value, expires, path, domain, secure ) { var today = new Date(); today.setTime( today.getTime() ); if (expires) { expires = expires * 1000 * 60 * 60 * 24; } var expires_date = new Date( today.getTime() + (expires) ); document.cookie = name+'='+escape( value ) + ( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString() ( ( path ) ? ';path=' + path : '' ) + ( ( domain ) ? ';domain=' + domain : '' ) + ( ( secure ) ? ';secure' : '' ); }, deleteCookie : function ( name, path, domain ) { if ( getCookie( name ) ) document.cookie = name + '=' + ( ( path ) ? ';path=' + path : '') + ( ( domain ) ? ';domain=' + domain : '' ) + ';expires=Thu, 01-Jan-1970 00:00:01 GMT'; } }; /** * 刷新各域名下的登录态 * use: refreshLogin.init([domains],sign) */ var refreshLogin = function(){ var //默认各域名下刷新的接口路径 path = '/LoginService.aspx?method=refreshSign&callback=refreshLogin.cbRefresh&sign=', //待刷新的url列表 刷新用 urls = [], //已刷新过的url缓存下来 urlsRefreshed = {}, //待提交刷新验证的sign sign = '', //新一轮刷新的标记:只有为true时 才doRefresh isNew = false, //刷新完成之后的回调 callback = null, //已刷新的url的index,对应urls;每次刷新完一个之后累加 刷新用 currentRefreshIndex = 0, //多长时间刷新一次: timeRefresh = 15*60*1000,//15分钟 //倒计时timer 待刷新的下一个 timerNext = null, /** * 递归调用刷新cookie */ doRefresh = function(){ if(!isNew){return;} //刷新下一个 var url = urls[currentRefreshIndex], _url = '', _id = ''; currentRefreshIndex++; if(url){ _url = url[0]; _id = url[1]; if(urlsRefreshed[_id]){//已刷新过 doRefresh(); clearTimeout(timerNext); }else{ urlsRefreshed[_id] = true; _url += sign; //console.log(currentRefreshIndex) //console.log(_url) LOGIN.loadScript(_url,function(){});//do loading timerNext = setTimeout(function(){ doRefresh(); },1000); } }else{//刷新完之后 重设 currentRefreshIndex = 0; urlsRefreshed = {}; isNew = false; if(callback){ callback(); } } }, //回调:刷新结果 cbRefresh = function(json){ if(json.success=='true'){ /* currentRefreshIndex++; var url = urls[currentRefreshIndex]; if(url){ doRefresh(url); }*/ }else{ //刷新失败:登录态失效?子域名服务器端异常? } doRefresh(); }, /** * 获取每个域名下的刷新接口url * @param {Array} arrDomains 要请求的域名列表 */ getRefreshUrls = function(arrDomains){ var _domain,_url,_id, arr = [];//[['http://www.test.com','www_gpsoo_net']] for(var i=0,len=arrDomains.length;i